home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1994 / 6 / 01 / mini-compiler / hilfe / optimize2.hilfe < prev    next >
Encoding:
Text File  |  1995-06-01  |  1.9 KB  |  78 lines

  1. %Item
  2. %Text
  3. 2   Optmierer
  4. 1
  5. 1 In diesem Abschnitt wird kurz erläutert, wie
  6. 1der Optimierer arbeitet. Es ist ein einfacher
  7. 1Peephole-Optimizer, der  keine Analysen  über
  8. 1den Code fährt und dann den  generierten Code
  9. 1verbessert, sondern er schaut nach kurzen Se-
  10. 1quenzen im  Code, die dann durch kürzere oder
  11. 1schnellere ersetzt werden. Dies macht deshalb
  12. 1Sinn, weil der Compiler Code jeweils unabhän-
  13. 1gig in Blöcken generiert. Da wären z.B :
  14. 1
  15. 1  - Variablenadressierung
  16. 1  - Befehlsfolgen
  17. 1  - Prozeduraufrufe
  18. 1  - Ausdrücke
  19. 1
  20. 1um nur einige zu nennen. Schauen wir uns  mal
  21. 1ein kurzes Mini-Comp-Programm an :
  22. 1
  23. 3  Program Test;
  24. 3  Var i : Integer;
  25. 3
  26. 3  Begin
  27. 3   Writeln('Hallo Welt');
  28. 3   Readln(i);
  29. 3   Writeln('I=',i)
  30. 3  End.
  31. 3
  32. 1Welche Blöcke werden nun im Code erzeugt ?
  33. 1
  34. 1 <Push 'Hallo Welt'>   ; String auf den Stack
  35. 1 <Put  String>         ; String ausgeben
  36. 1 <Read Wort>           ; Wort von StdIO lesen
  37. 1 <Make Int>            ; Eingabe nach Integer
  38. 1 <Push Adr(I)>         ; Adresse i auf Stack
  39. 1 <Assign>              ; Intwert nach Adresse
  40. 1                       ; speichern
  41. 1 <Push 'I='>           ; String auf Stack
  42. 1 <Put  String>         ; String ausgeben
  43. 1 <Push adr(i)>         ; Adresse von i und
  44. 1 <Fetch>               ; Inhalt auf den Stack
  45. 1 <Make String>         ; In String wandeln
  46. 1 <Put  String>         ; und ausgeben
  47. 1
  48. 1 Und alle diese Blöcke werden  unabhängig von
  49. 1einander erzeugt, so daß an aufeinander  fol-
  50. 1genden Blöcken Optimierungen möglich sind.
  51. 1
  52. 1 Folgende Sequenzen werden  im Moment erkannt
  53. 1und optimiert :
  54. 1
  55. 3  Alt                  Optimiert
  56. 1
  57. 1  Move.l #x,d0         Moveq  #x,d0
  58. 1
  59. 1  Move.l a5,a0
  60. 1  Move.l (a0),a0       Move.l (a5),a0
  61. 1
  62. 1  Move.l d0,-(sp)
  63. 1  Move.l (sp)+,d0      --
  64. 1
  65. 1  Move.l a0,-(sp)
  66. 1  Move.l (sp)+,a0      --
  67. 1
  68. 1  Adda.l #0,a0         --
  69. 1
  70. 1  Addi.l #0,(a7)       --
  71. 1
  72. 1  Move.w d0,-(sp)
  73. 1  Move.w (sp)+,d0      --
  74. 1
  75. 1 Wobei <x>  im Bereich von -128 bis +127 lie-
  76. 1gen muß.
  77. %Ende
  78.